﻿using System;
using System.Threading;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using ProjetoSolo.QueroGas.Aplicacao.Servicos;
using ProjetoSolo.QueroGas.Dominio.Entidades;

namespace QueroGas.Teste
{
    [TestClass]
    public class TesteServicoUsuario
    {
        private Usuario usuario;

        [TestInitialize]
        public void IniciarTeste()
        {
            usuario = new Usuario()
            {
                Nome = "Julio" + new Random().Next(500),
                Senha = "12345",
                Email = "lucilvio@gmail.com"
            };
        }

        [TestMethod]
        public void CadastrarUsuario()
        {
            Random rand = new Random();

            try
            {
                ServicoUsuario.Cadastrar(usuario);
            }
            catch (Exception ex)
            {
                Assert.Fail(ex.Message);
            }
        }    

        [TestMethod]
        public void RecuperarSenha()
        {
            try
            {
                ServicoUsuario.RecuperarSenha("julio110", "lucilvio@gmail.com");
            }
            catch (Exception ex)
            {
                Assert.Fail(ex.Message);
                throw;
            }
        }

        [TestMethod]
        public void TrocarSenha()
        {
            try
            {
                ServicoUsuario.TrocarSenha("Julio110", "E1K5J3M4", "12345");
            }
            catch (Exception ex)
            {
                Assert.Fail(ex.Message);
            }
        }

        [TestMethod]
        public void AtivarCadastro()
        {
            int usuarioAtivado = 0;

            try
            {
                usuarioAtivado = ServicoUsuario.AtivarCadastro(13);
            }
            catch (Exception ex)
            {
                Assert.Fail("Erro ao ativar o usuário. " + ex.Message);
            }

            Assert.AreNotEqual(0, usuarioAtivado, "Não foi encontrado nenhum usuário com o código informado. O usuário não será atualizado.");
        }

        [TestMethod]
        public void InativarCadastro()
        {
            int usuarioInativado = 0;

            try
            {
                usuarioInativado = ServicoUsuario.InativarCadastro(13);
            }
            catch (Exception ex)
            {                
                Assert.Fail(ex.Message);
            }

            Assert.AreNotEqual(0, usuarioInativado, "Não foi encontrado nenhum usuário com o código informado. O usuário não será atualizado.");
        }
    }
}
